D:\a\scloud-dns\scloud-dns\src\utils\time.rs
Line | Count | Source |
1 | | use std::time::{SystemTime, UNIX_EPOCH}; |
2 | | |
3 | 0 | pub(crate) fn now_epoch_ms() -> u128 { |
4 | 0 | SystemTime::now() |
5 | 0 | .duration_since(UNIX_EPOCH) |
6 | 0 | .map(|d| d.as_millis()) |
7 | 0 | .unwrap_or(0) |
8 | 0 | } |
9 | | |
10 | 0 | pub(crate) fn civil_from_days(days: i64) -> (i32, u32, u32) { |
11 | 0 | let z = days + 719_468; |
12 | 0 | let era = z / 146_097; |
13 | 0 | let doe = z - era * 146_097; |
14 | 0 | let yoe = (doe - doe / 1460 + doe / 36524 - doe / 146096) / 365; |
15 | 0 | let y = yoe + era * 400; |
16 | 0 | let doy = doe - (365 * yoe + yoe / 4 - yoe / 100); |
17 | 0 | let mp = (5 * doy + 2) / 153; |
18 | 0 | let d = doy - (153 * mp + 2) / 5 + 1; |
19 | 0 | let m = mp + if mp < 10 { 3 } else { -9 }; |
20 | | |
21 | | ( |
22 | 0 | (y + if m <= 2 { 1 } else { 0 }) as i32, |
23 | 0 | m as u32, |
24 | 0 | d as u32, |
25 | | ) |
26 | 0 | } |
27 | | |
28 | 0 | pub(crate) fn format_unix_timestamp(secs: u64) -> String { |
29 | | const SECS_PER_DAY: u64 = 86_400; |
30 | | |
31 | 0 | let days = secs / SECS_PER_DAY; |
32 | 0 | let mut rem = secs % SECS_PER_DAY; |
33 | | |
34 | 0 | let hour = rem / 3600; |
35 | 0 | rem %= 3600; |
36 | 0 | let min = rem / 60; |
37 | 0 | let sec = rem % 60; |
38 | | |
39 | 0 | let (year, month, day) = civil_from_days(days as i64); |
40 | | |
41 | 0 | format!( |
42 | | "{:02}/{:02}/{:04}-{:02}:{:02}:{:02}", |
43 | | month, day, year, hour, min, sec |
44 | | ) |
45 | 0 | } |
46 | | |
47 | 0 | pub(crate) fn format_system_time(t: SystemTime) -> String { |
48 | 0 | let secs = t |
49 | 0 | .duration_since(UNIX_EPOCH) |
50 | 0 | .unwrap_or_default() |
51 | 0 | .as_secs(); |
52 | | |
53 | 0 | format_unix_timestamp(secs) |
54 | 0 | } |